      1  /**

      2     A bank account has a balance that can be changed by

      3     deposits and withdrawals.

      4  */

      5  public class BankAccount

      6  {

      7     private double balance;

      8     private int accountNumber;

      9     private static int lastAssignedNumber = 1000;

     10

     11     public static final double OVERDRAFT_FEE = 29.95;

     12

     13     /**

     14        Constructs a bank account with a zero balance.

     15     */

     16     public BankAccount()

     17     {

     18        lastAssignedNumber++;

     19        accountNumber = lastAssignedNumber;

     20        balance = 0;

     21     }

     22

     23     /**

     24        Constructs a bank account with a given balance.

     25        @param initialBalance the initial balance

     26     */

     27     public BankAccount(double initialBalance)

     28     {

     29        balance = initialBalance;

     30     }

     31

     32     /**

     33        Deposits money into this account.

     34        @param amount the amount to deposit

     35     */

     36     public void deposit(double amount)

     37     {

     38        balance = balance + amount;

     39     }

     40

     41     /**

     42        Makes a withdrawal from this account, or charges a penalty if

     43        sufficient funds are not available.

     44        @param amount the amount of the withdrawal

     45     */

     46     public void withdraw(double amount)

     47     {

     48        if (amount > balance)

     49        {

     50           balance = balance - OVERDRAFT_FEE;

     51        }

     52        else

     53        {

     54           balance = balance - amount;

     55        }

     56     }

     57

     58     /**

     59        Adds interest to this account.

     60        @param rate the interest rate in percent

     61     */

     62     public void addInterest(double rate)

     63     {

     64        balance = balance + Financial.percentOf(rate, balance);

     65     }

     66

     67     /**

     68        Gets the current balance of this account.

     69        @return the current balance

     70     */

     71     public double getBalance()

     72     {

     73        return balance;

     74     }

     75  }